/////////////////////////////////////////////////////////////////////////////////////////////
// Filename: RequestMessages.h
//
// Defines the two types of messages the Engine handles: Request Messages and Command Messages.
// -----------------------------------------------------------------------------------------
//
// COMMAND MESSAGES are sent by the application to the various subsystems.
// Subsystems must respond to command messages by providing the needed data or performing the
// needed operations.
//
// REQUEST MESSAGES are sent by the various subsystems to the application.
// The application may handle or discard request messages, depending on the aplication state.
// 
// (c) Dave Ottley, 2012. All rights reserved.
/////////////////////////////////////////////////////////////////////////////////////////////

#ifndef MESSAGES_H
#define MESSAGES_H

#include <string>

inline std::wstring MessageToString(int msg);

namespace Request
{
	enum MessageType
	{
		// Application Requests
		NumPlayers = 001,

		// Graphics Subsystem (D3D) Requests
		GraphicsDeviceActiveState = 1000,
		ResizeWindow = 1001,
		ToggleFullscreen = 1002,


		// Input Subsystem Requests
		HandleMouseDown = 2000,
		HandleMouseUp = 2001,
		HandleMouseMove = 2002,
		HandleKeyDown = 2003,


		// OS Sybsystem Requests
		ScreenDimensions = 3000,
		WindowHandle = 3001,


		// Game Timer Requests
		RequestCurrentTime = 4001,
		RequestFrameDeltaTime = 4002,

		// Entities Subsystem Requests (5000)

		
		// Audio Subsystem Requests (6000)


		
		
	};

}

namespace Command
{
	enum MessageType
	{
		// Application -> Graphics Subsystem (D3D)
		GiveGraphicsDeviceActiveState = 91000,
		ResizeWindow = 91001,
		ToggleFullscreen = 91002,


		// Application -> Input Subsystem
		HandleMouseDown = 92000,
		HandleMouseUp = 92001,
		HandleMouseMove = 92002,
		HandleKeyDown = 92003,


		// Application -> OS Sybsystem (Windows)
		GiveScreenDimensions = 93000,
		GiveWindowHandle = 93001,


		// Application -> Game Timer
		Pause = 94000,
		Unpause = 94001,

		// Application -> Entities Subsystem (5000)
		

		// Application -> Audio Subsystem (6000)
		

	
	};

}



#endif // MESSAGES_H